/*
 * bsp_gpio.h
 *
 *  Created on: 2023年6月28日
 *      Author: mcealt_DS
 */

#ifndef BSP_GPIO_H_
#define BSP_GPIO_H_

#include "gpiointerrupt.h"
#include "em_gpio.h"
#include "em_cmu.h"

typedef struct{
  GPIO_Port_TypeDef port;
  uint32_t pin;
  GPIO_Mode_TypeDef mode;
  uint8_t valid;  //有效值
  uint8_t initial;  //初始值
}ds_gpio_t;


void ds_gpio_init(ds_gpio_t *led_ins);
void ds_gpio_on(ds_gpio_t *led_ins);
void ds_gpio_off(ds_gpio_t *led_ins);
void ds_gpio_toggle(ds_gpio_t *led_ins);

void ds_gpio_set(ds_gpio_t *gpio_ins);//push pull 推挽输出置1
void ds_gpio_clear(ds_gpio_t *gpio_ins);//push pull 推挽输出清0
uint8_t ds_gpio_read(ds_gpio_t *gpio_ins);

typedef struct{
  GPIO_Port_TypeDef port;
  uint32_t pin;
  GPIO_Mode_TypeDef mode;
  uint8_t valid;    //有效值
  uint8_t initial;    //初始值
  uint32_t interruptIndex;
  GPIOINT_IrqCallbackPtrExt_t ds_button_state_change;   //当触发中断时的回调函数
}ds_button_t;

void ds_button_init(ds_button_t *button_ins);
void ds_button_deinit(ds_button_t *button_ins);
uint8_t read_button_level(ds_button_t *button_ins);

#endif /* BSP_GPIO_H_ */
